package com.zbs.framework.pay.service;

import com.alipay.easysdk.payment.common.models.AlipayTradeCancelResponse;
import com.alipay.easysdk.payment.common.models.AlipayTradeCloseResponse;
import com.alipay.easysdk.payment.common.models.AlipayTradeFastpayRefundQueryResponse;
import com.zbs.framework.pay.event.AlipayCallbackModel;
import com.zbs.framework.pay.qrcode.QrCodeResponse;

import java.math.BigDecimal;
import java.util.Map;

public interface AliPayNewService {

    /**
     * app支付
     * @param subject 标题
     * @param tradeNo 订单编号
     * @param totalAmount 交易金额
     * @param express  超时时间
     * @throws Exception
     */
    QrCodeResponse createAppTradeForm(String subject, String tradeNo, BigDecimal totalAmount, String express) throws Exception;

    /**
     * 当面付
     * @param subject 标题
     * @param tradeNo 订单编号
     * @param totalAmount 交易金额
     * @param express  超时时间
     * @param authCode 客户的支付二维码
     * @return
     * @throws Exception
     */
    QrCodeResponse createFaceToFace(String subject , String tradeNo, BigDecimal totalAmount, String express, String authCode) throws Exception;

    /**
     * 当面付
     * @param subject 标题
     * @param tradeNo 订单编号
     * @param totalAmount 交易金额
     * @param express  超时时间
     * @return
     * @throws Exception
     */
    QrCodeResponse createFaceToFace(String subject , String tradeNo, BigDecimal totalAmount, String express) throws Exception;

    /**
     * pc端到支付宝下单 目前不支持下单  提示钓鱼风险 使用当面付
     * @param subject 标题
     * @param tradeNo 订单编号
     * @param totalAmount 交易金额
     * @param express  超时时间
     * @param returnUrl
     * @return
     * @throws Exception
     */
    QrCodeResponse createWebTradeForm(String subject , String tradeNo, BigDecimal totalAmount,String express, String returnUrl) throws Exception;

    /**
     *  alipay.trade.wap.pay
     *  构造交易数据供wap端到支付宝下单
     */
    QrCodeResponse createWapTradeForm(String subject , String tradeNo, BigDecimal totalAmount,String express, String quitUrl, String returnUrl) throws Exception;

    /**
     * 对应alipay.trade.query(统一收单线下交易查询)
     */
    AlipayCallbackModel queryTrade(String tradeNo, String outTradeNo) throws Exception;

    /**
     * alipay.trade.cancel
     */
    AlipayTradeCancelResponse cancelTrade(String tradeNo) throws Exception;

    /**
     * alipay.trade.close(统一收单交易关闭接口)
     */
    AlipayTradeCloseResponse closeTrade(String tradeNo) throws Exception;

    /**
     * 回执单号退款
     * @param tradeNo  订单号
     * @param outTradeNo 支付宝回执单号
     * @param refundAmount 回退金额
     * @return  订单号
     * @throws Exception
     */
    String refundTrade(String tradeNo, String outTradeNo, BigDecimal refundAmount) throws Exception;


    /**
     * 支付宝2.0验签
     * @param parameters 验签参数
     * @return
     * @throws Exception
     */
    boolean verifyNotify(Map<String, String> parameters) throws Exception;

    /**
     * alipay.trade.fastpay.refund.query(统一收单交易退款查询)
     */
    AlipayTradeFastpayRefundQueryResponse refundQuery(String tradeNo, String outRequestNo) throws Exception;
}
